[id].vue 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535
  1. <template>
  2. <!-- 页面头部 -->
  3. <HomePageHead></HomePageHead>
  4. <!-- 导航栏 -->
  5. <HomePageNavigation></HomePageNavigation>
  6. <div>当前皮肤:{{ skinId }}</div>
  7. <div>/sannongzixun/601517.html</div>
  8. <div><br/><br/><br/></div>
  9. <!-- 页面底部 -->
  10. <HomeFoot></HomeFoot>
  11. </template>
  12. <script setup>
  13. //0.pinia单基本信息 start---------------------------------------->
  14. //0.1获得pinia源
  15. import { useTemplateBaseStore } from '@/stores/templateBase'
  16. const templateBaseStore = useTemplateBaseStore()
  17. //0.2获得该页的皮肤id - 在每个组件中也是同样的获得方法
  18. const skinId = ref("")
  19. //0.3获得站点基本信息
  20. let getTemplateBaseInfo = async () => {
  21. const responseStatus = await requestDataPromise('/web/getWebsiteAllinfo', {
  22. method: 'GET',
  23. query: {
  24. 'link_textnum':24,
  25. 'link_imgnum':18,
  26. 'link_footnum':4
  27. },
  28. });
  29. if (responseStatus.code == 200) {
  30. templateBaseStore.setWebSiteInfo(responseStatus.data)
  31. skinId.value = templateBaseStore.webSiteInfo.website_foot.foot_info.template_id;
  32. }
  33. }
  34. getTemplateBaseInfo();
  35. //0.4获得广告池
  36. let getAdList = async (adKey) => {
  37. const responseStatus = await requestDataPromise('/web/getWebsiteAdvertisement', {
  38. method: 'GET',
  39. query: {
  40. },
  41. });
  42. if (responseStatus.code == 200) {
  43. //console.log(responseStatus.data)
  44. templateBaseStore.setAdList(responseStatus.data)
  45. //获取广告
  46. //adImg.value = requestAd(templateBaseStore.webAdList,templateBaseStore.webSiteInfo.website_head.ad_key + "_" + "top")
  47. }
  48. }
  49. getAdList();
  50. //0.5设置seo信息
  51. //0.pinia单基本信息 end---------------------------------------->
  52. //1.页面依赖 start ---------------------------------------->
  53. import { onMounted } from 'vue'
  54. import { ElBreadcrumb, ElBreadcrumbItem, ElRadio, ElRadioGroup, ElCheckbox, ElCheckboxGroup, ElMessage, ElInput } from 'element-plus'
  55. import { ArrowRight } from '@element-plus/icons-vue'
  56. //1.页面依赖 end ---------------------------------------->
  57. //2.页面路径 start ---------------------------------------->
  58. const targetSegment = getRoutePath(1);
  59. let routeId;
  60. //通过导航路径反向查询导航id
  61. const getRouteId = await requestDataPromise('/web/getWebsiteRoute', {
  62. method: 'GET',
  63. query: {
  64. 'pinyin': targetSegment,
  65. },
  66. });
  67. if (getRouteId.code == 200) {
  68. routeId = getRouteId.data.category_id
  69. } else {
  70. console.log("错误位置:获得页面路径")
  71. }
  72. //2.页面路径 start ---------------------------------------->
  73. //3.面包屑 start ---------------------------------------->
  74. const route = useRoute();
  75. const articleId = parseInt(route.params.id); //获得该页面的id
  76. //3.1 获得父级栏目的名称、id
  77. const parent_name = ref([]);
  78. const parent_id = ref([]);
  79. const parent_pinyin = ref("");
  80. const parent_children_count = ref(0)
  81. let getParentNav = async () => {
  82. const listData = await requestDataPromise('/web/getOneWebsiteCategory', {
  83. method: 'GET',
  84. query: {
  85. 'catid': routeId
  86. },
  87. });
  88. if (listData.code == 200) {
  89. parent_name.value = listData.data.alias;
  90. parent_id.value = listData.data.parent_id;
  91. parent_pinyin.value = listData.data.aLIas_pinyin;
  92. parent_children_count.value = listData.data.children_count;
  93. } else {
  94. console.log("错误位置:获取面包屑导航")
  95. }
  96. }
  97. getParentNav();
  98. //3.页面依赖 end ---------------------------------------->
  99. //4.页面数据 start ---------------------------------------->
  100. //4.1 资讯详情
  101. const newsDetail = ref({})
  102. const routeNewsTtitle = ref("");
  103. //4.2 发布日期
  104. const time = ref("");
  105. //4.3 路径
  106. const routLevelTitle = ref("");
  107. const routLevelId = ref("");
  108. //4.4 是否展示投票
  109. const articleChoice = ref(false);
  110. //4.5 获取详情
  111. async function getPageData() {
  112. const mkdata = await requestDataPromise('/web/selectWebsiteArticleInfo', {
  113. method: 'GET',
  114. query: {
  115. 'articleid': articleId
  116. },
  117. });
  118. if (mkdata.code == 200) {
  119. //判断是否显示投票
  120. if (mkdata.data.is_survey == 1) {
  121. console.log("本篇文章含有投票!")
  122. articleChoice.value = true;
  123. getVoteList();
  124. }
  125. //获取内容
  126. newsDetail.value = mkdata.data;
  127. //获取路径
  128. routLevelTitle.value = newsDetail.value.cat_name;
  129. routLevelId.value = newsDetail.value.category_id;
  130. //获取发布时间
  131. time.value = newsDetail.value.updated_at.split(' ')[0];
  132. //修正标题长度
  133. if (newsDetail.value.title.length >= 20) {
  134. routeNewsTtitle.value = newsDetail.value.title.substr(0, 20) + "...";
  135. } else {
  136. routeNewsTtitle.value = newsDetail.value.title
  137. }
  138. } else {
  139. console.log("错误位置:获取详情内容")
  140. }
  141. }
  142. getPageData();
  143. //4.页面数据 end ---------------------------------------->
  144. //5.广告 start ---------------------------------------->
  145. let adImg1 = ref([]);
  146. let adImg2 = ref([]);
  147. onMounted(async () => {
  148. const { $webUrl, $CwebUrl } = useNuxtApp();
  149. //广告1
  150. let url = `${$webUrl}/web/getWebsiteAdvertisement?ad_tag=nmw_detail_0001`
  151. const responseAd1 = await fetch(url, {
  152. headers: {
  153. 'Content-Type': 'application/json',
  154. 'Userurl': $CwebUrl,
  155. 'Origin': $CwebUrl
  156. }
  157. });
  158. const resultAd1 = await responseAd1.json();
  159. adImg1.value = resultAd1.data[0];
  160. //广告2
  161. let url2 = `${$webUrl}/web/getWebsiteAdvertisement?ad_tag=nmw_detail_0002`
  162. const responseAd2 = await fetch(url2, {
  163. headers: {
  164. 'Content-Type': 'application/json',
  165. 'Userurl': $CwebUrl,
  166. 'Origin': $CwebUrl
  167. }
  168. });
  169. const resultAd2 = await responseAd2.json();
  170. adImg2.value = resultAd2.data[0];
  171. })
  172. //5.广告 end ---------------------------------------->
  173. //6.设置seo信息 start---------------------------------------->
  174. const setData = await requestDataPromise('/web/selectWebsiteArticleInfo', {
  175. method: 'GET',
  176. query: {
  177. 'articleid': articleId
  178. },
  179. });
  180. if (setData.code == 200) {
  181. let seoTitle = setData.data.title;
  182. let seoDescription = setData.data.introduce;
  183. let seoKeywords = setData.data.keyword;
  184. let seoSuffix = setData.data.suffix;
  185. let seoName = setData.data.website_name;
  186. useSeoMeta({
  187. title: seoTitle + "_" + seoName + "_" + seoSuffix,
  188. meta: [
  189. { name: 'description', content: seoDescription + "_" + seoName + "_" + seoSuffix, tagPriority: 10 },
  190. { name: 'keywords', content: seoKeywords + "_" + seoName + "_" + seoSuffix, tagPriority: 10 }
  191. ]
  192. });
  193. } else {
  194. console.log("SSR waring ---------- SSR waring ---------- SSR waring ---------->")
  195. console.log("错误位置:设置详情页面SEO数据")
  196. console.log("后端错误反馈:", setData.message)
  197. console.log("SSR waring ---------- SSR waring ---------- SSR waring ---------->")
  198. }
  199. //6.设置seo信息 end---------------------------------------->
  200. //7.投票 start---------------------------------------->
  201. const radio1 = ref(''); //单选
  202. const check1 = ref([]); //多选
  203. const isDisabled = ref(false);//是否禁用提交按钮
  204. const isRadio = ref(true);//是否渲染单选
  205. const userSurId = ref('');//投票属于哪一篇文章
  206. const userChoice = ref('');//用于判断用户选择了其他选项以后,输入的值
  207. const userIsChoice = ref('');//用于判断其他选项目前是什么值
  208. const showUserChoice = ref(false);//是否显示其他输入框
  209. const websiteSurveyData = ref([]);//投票结果
  210. //7.2获得投票列表
  211. let voteList = ref([]);
  212. async function getVoteList() {
  213. const voteData = await requestHome('/web/getWebsiteSurvey', { method: 'GET', query: { 'art_id': articleId } });
  214. console.log(778899)
  215. console.log(voteData)
  216. if (voteData.code == 200) {
  217. voteList.value = voteData.data;
  218. console.log(voteList.value)
  219. //判断显示单选还是多选
  220. //survey_type 0是单选 1是多选
  221. if (voteData.data[0].survey_type == 0) {
  222. isRadio.value = true;
  223. console.log("1111")
  224. } else {
  225. isRadio.value = false;
  226. }
  227. //把最后一个的值拿出来 用于判断用户是否选择了其他
  228. for (let item of voteData.data) {
  229. //如果含有其他
  230. if (item.is_other == 1) {
  231. userIsChoice.value = item.id;
  232. }
  233. }
  234. //用户投票属于哪一篇文章
  235. userSurId.value = voteData.data[0].sur_id;
  236. } else {
  237. console.log("SSR waring ---------- SSR waring ---------- SSR waring ---------->")
  238. console.log("错误位置:首页投票")
  239. console.log("后端错误反馈:", voteData.message)
  240. console.log("SSR waring ---------- SSR waring ---------- SSR waring ---------->")
  241. }
  242. }
  243. //7.3当用户选择了选项,判断是否展示其他输入框
  244. const handleRadioChange = (value) => {
  245. if (value == userIsChoice.value) {
  246. showUserChoice.value = true;
  247. } else {
  248. showUserChoice.value = false;
  249. }
  250. }
  251. const handleCheckboxChange = (value) => {
  252. if (value.includes(userIsChoice.value)) {
  253. showUserChoice.value = true;
  254. } else {
  255. showUserChoice.value = false;
  256. }
  257. }
  258. //7.4发起投票
  259. async function addWebsiteSurvey() {
  260. //判断当前是单选还是多选
  261. console.log(isRadio.value)
  262. if (isRadio.value) {
  263. console.log("用户单选!")
  264. if (radio1.value != '') {
  265. //先判断一下是否使用了其他选项
  266. if (showUserChoice.value) {
  267. if (userChoice.value != '') {
  268. //文章id
  269. // console.log(userSurId.value)
  270. // 用户输入的值
  271. // console.log(userChoice.value)
  272. //如果使用了其他,其他的选项需要增加进去
  273. const ChoiceData = await requestHome('/web/addWebsiteSurveyOption', {
  274. method: 'GET',
  275. query: {
  276. 'sur_id': userSurId.value,//投票的新闻id
  277. 'choice_name': userChoice.value,//投票的选项id
  278. }
  279. });
  280. if (ChoiceData.code == 200) {
  281. //提交完其他选项以后,再正式发起投票
  282. const mkData = await requestHome('/web/addWebsiteSurveyVote', {
  283. method: 'GET',
  284. query: {
  285. 'sur_id': userSurId.value,
  286. 'choice_id': ChoiceData.data
  287. }
  288. });
  289. if (mkData.code == 200) {
  290. ElMessage.success('投票成功!')
  291. //把投票结果显示到页面上 禁用投票按钮
  292. isDisabled.value = true;
  293. websiteSurveyData.value = mkData.data;
  294. //遍历一下,把用户选中的那个设置status为1
  295. let data = mkData.data;
  296. //遍历一下,把用户选中的那个设置status为1
  297. for (let item of data.data) {
  298. for (let i of data.choice) {
  299. if (item.id == i) {
  300. console.log(item.id)
  301. item.status = 1;
  302. }
  303. }
  304. }
  305. websiteSurveyData.value = data;
  306. } else {
  307. ElMessage.error(mkData.message)
  308. }
  309. } else {
  310. ElMessage.error('其他投票失败!')
  311. }
  312. } else {
  313. ElMessage.error('请输入选项内容!')
  314. }
  315. } else {
  316. //如果没选择其他,直接提交选择的内容
  317. const mkData = await requestHome('/web/addWebsiteSurveyVote', {
  318. method: 'GET',
  319. query: {
  320. 'sur_id': userSurId.value,
  321. 'choice_id': radio1.value
  322. }
  323. });
  324. if (mkData.code == 200) {
  325. ElMessage.success('投票成功!')
  326. //把投票结果显示到页面上 禁用投票按钮
  327. isDisabled.value = true;
  328. let data = mkData.data;
  329. //遍历一下,把用户选中的那个设置status为1
  330. for (let item of data.data) {
  331. for (let i of data.choice) {
  332. if (item.id == i) {
  333. item.status = 1;
  334. }
  335. }
  336. }
  337. websiteSurveyData.value = data;
  338. } else {
  339. ElMessage.error('投票失败!')
  340. }
  341. }
  342. } else {
  343. ElMessage.error('请选择一个选项')
  344. }
  345. } else {
  346. console.log("多选!")
  347. //多选
  348. if (check1.value != []) {
  349. //先判断一下是否使用了其他选项
  350. if (showUserChoice.value) {
  351. if (userChoice.value != '') {
  352. //判断用户是否只选择了一个其他
  353. if (check1.value.length == 1) {
  354. const ChoiceData = await requestDataPromise('/web/addWebsiteSurveyOption', {
  355. method: 'GET',
  356. query: {
  357. 'sur_id': userSurId.value,//投票的新闻id
  358. 'choice_name': userChoice.value,//用户输入的其他选项文字
  359. }
  360. });
  361. if (ChoiceData.code == 200) {
  362. //提交完其他选项以后,再正式发起投票
  363. const mkData = await requestDataPromise('/web/addWebsiteSurveyVote', {
  364. method: 'GET',
  365. query: {
  366. 'sur_id': userSurId.value,
  367. 'choice_id': ChoiceData.data
  368. }
  369. });
  370. if (mkData.code == 200) {
  371. ElMessage.success('投票成功!')
  372. //把投票结果显示到页面上 禁用投票按钮
  373. isDisabled.value = true;
  374. websiteSurveyData.value = mkData.data;
  375. //遍历一下,把用户选中的那个设置status为1
  376. let data = mkData.data;
  377. //遍历一下,把用户选中的那个设置status为1
  378. for (let item of data.data) {
  379. for (let i of data.choice) {
  380. if (item.id == i) {
  381. console.log(item.id)
  382. item.status = 1;
  383. }
  384. }
  385. }
  386. websiteSurveyData.value = data;
  387. } else {
  388. ElMessage.error(mkData.message)
  389. }
  390. } else {
  391. ElMessage.error('其他投票失败!')
  392. }
  393. } else {
  394. //用户选择了除了其他以外,还包括别的选项
  395. const ChoiceData = await requestDataPromise('/web/addWebsiteSurveyOption', {
  396. method: 'GET',
  397. query: {
  398. 'sur_id': userSurId.value,//投票的新闻id
  399. 'choice_name': userChoice.value,//用户输入的其他选项文字
  400. }
  401. });
  402. if (ChoiceData.code == 200) {
  403. let data = check1.value;
  404. //找到多选的数组,把其他默认值给替换掉
  405. for (let i = 0; i < data.length; i++) {
  406. if (data[i] == userIsChoice.value) {
  407. data[i] = ChoiceData.data;
  408. }
  409. }
  410. let jsonArray = JSON.stringify(data);
  411. //提交完其他选项以后,再正式发起投票
  412. const mkData = await requestDataPromise('/web/addWebsiteSurveyVote', {
  413. method: 'GET',
  414. query: {
  415. 'sur_id': userSurId.value,
  416. 'choice_id': jsonArray
  417. }
  418. });
  419. if (mkData.code == 200) {
  420. ElMessage.success('投票成功!')
  421. //把投票结果显示到页面上 禁用投票按钮
  422. isDisabled.value = true;
  423. websiteSurveyData.value = mkData.data;
  424. //遍历一下,把用户选中的那个设置status为1
  425. let data = mkData.data;
  426. //遍历一下,把用户选中的那个设置status为1
  427. for (let item of data.data) {
  428. for (let i of data.choice) {
  429. if (item.id == i) {
  430. //console.log(item.id)
  431. item.status = 1;
  432. }
  433. }
  434. }
  435. websiteSurveyData.value = data;
  436. } else {
  437. ElMessage.error(mkData.message)
  438. }
  439. } else {
  440. ElMessage.error('其他投票失败!')
  441. }
  442. }
  443. } else {
  444. ElMessage.error('请输入选项内容!')
  445. }
  446. } else {
  447. let jsonArray = JSON.stringify(check1.value);
  448. //如果没选择其他,直接提交选择的内容
  449. const mkData = await requestDataPromise('/web/addWebsiteSurveyVote', {
  450. method: 'GET',
  451. query: {
  452. 'sur_id': userSurId.value,
  453. 'choice_id': jsonArray
  454. }
  455. });
  456. if (mkData.code == 200) {
  457. ElMessage.success('投票成功!')
  458. //把投票结果显示到页面上 禁用投票按钮
  459. isDisabled.value = true;
  460. websiteSurveyData.value = mkData.data;
  461. //遍历一下,把用户选中的那个设置status为1
  462. let data = mkData.data;
  463. //遍历一下,把用户选中的那个设置status为1
  464. for (let item of data.data) {
  465. for (let i of data.choice) {
  466. if (item.id == i) {
  467. console.log(item.id)
  468. item.status = 1;
  469. }
  470. }
  471. }
  472. websiteSurveyData.value = data;
  473. } else {
  474. ElMessage.error('投票失败!')
  475. }
  476. }
  477. } else {
  478. ElMessage.error('请选择一个选项')
  479. }
  480. }
  481. }
  482. //7.投票 end---------------------------------------->
  483. //8.页面图片放大 start---------------------------------------->
  484. const previewVisible = ref(false)
  485. const selectedImage = ref(' ')
  486. const openPreview = (event) => {
  487. if (event.target.tagName === 'IMG') {
  488. selectedImage.value = event.target.src;
  489. previewVisible.value = true;
  490. }
  491. }
  492. const closePreview = () => {
  493. previewVisible.value = false;
  494. }
  495. //8.页面图片放大 end---------------------------------------->
  496. </script>
  497. <style lang="less" scoped>
  498. @import url('@/assets/css/detail.less');
  499. </style>